package band.wukong.practice.java.core.topic.concurrency.thread.runnablevsthread;

/**
 * @author wukong(wukonggg@139.com)
 */
public class RunnableDemo {

    public static void main(String[] args) {
        System.out.println("["+ Thread.currentThread().getName() +"] Main");
        MyRunnable my = new MyRunnable();
        new Thread(my).start();
        new Thread(my).start();
        new Thread(my).start();
    }

}

class MyRunnable implements Runnable {

    private int ticket = 5;

    public void run() {
        for (int i = 0; i < 10; i++) {
            if (ticket > 0) {
// 由于3个Thread对象共同执行一个Runnable对象中的代码，因此可能会造成线程的不安全，比如可能ticket会输出-1
// 如果我们System.out....语句前加上线程休眠操作，该情况将很有可能出现）
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("["+ Thread.currentThread().getName() +"] ticket = " + ticket--);
            }
        }
    }
}